[系统安全] 三十三.恶意代码检测(3)基于机器学习的恶意代码检测技术
文章目录:
一.机器学习概述与算法举例
1.机器学习概念
2.机器学习算法举例
3.特征工程-特征选取与设计
二.基于机器学习方法的恶意代码检测
1.恶意代码的静态动态检测
(1) 特征种类
(2) 常见算法
2.静态特征设计举例
3.经典的图片特征举例
4.动态特征设计举例
5.深度学习静态检测举例
6.优缺点
7.静态分析和动态分析对比
三.机器学习算法在工业界的应用
四.总结
作者的github资源:
逆向分析:
https://github.com/eastmountyxz/
SystemSecurity-ReverseAnalysis
网络安全:
https://github.com/eastmountyxz/
NetworkSecuritySelf-study
一.机器学习概述与算法举例
1.机器学习概念
超平面(SVM)
在二维坐标轴中,可以设计一条直线将空间内分布的散点区分开来,如下图所示。
softmax
另外一种方法是构造类别概率输出(softmax),比如归一化处理得到A+B=1,最后看A和B的概率,谁的概率大就属于哪一类,该方法广泛使用于神经网络的最后结果计算中。
2.机器学习算法举例
3.特征工程-特征选取与设计
《统计学习方法》李航,数学理论较多
《机器学习》周志华,西瓜书,较通俗透彻
《Deep Learning》Ian Goodfellow,花书,深度学习内容全面
《精通特征工程》结合恶意代码特征学习,包括如何向量化
二.基于机器学习方法的恶意代码检测
1.恶意代码的静态动态检测
(1) 特征种类
静态特征: 没有真实运行的特征
字节码:二进制代码转换成了字节码,比较原始的一种特征,没有进行任何处理
IAT表:PE结构中比较重要的部分,声明了一些函数及所在位置,便于程序执行时导入,表和功能比较相关
Android权限表:如果你的APP声明了一些功能用不到的权限,可能存在恶意目的,如手机信息
可打印字符:将二进制代码转换为ASCII码,进行相关统计
IDA反汇编跳转块:IDA工具调试时的跳转块,对其进行处理作为序列数据或图数据
动态特征: 相当于静态特征更耗时,它要真正去执行代码
API调用关系:比较明显的特征,调用了哪些API,表述对应的功能
控制流图:软件工程中比较常用,机器学习将其表示成向量,从而进行分类
数据流图:软件工程中比较常用,机器学习将其表示成向量,从而进行分类
if (x < y)
{
y = 0;
x = x + 1;
}
else
{
x = y;
}
(2) 常见算法
普通机器学习方法(SVM支持向量机、RF随机森林、NB朴素贝叶斯)
深度神经网络(Deep Neural Network)
卷积神经网络(Convolution Neural Network)
长短时记忆网络(Long Short-Term Memory Network)
针对序列模型进行建模,包含上下文依赖关系,比如“我 是 一名 大学生”中的“我”和“是”前后出现的条件概率更高。广泛应用于文本分类、语音识别中,同样适用于恶意代码检测。图卷积网络 (Graph Convolution Network)
比较新兴的方法,将卷积应用到图领域,图这种数据类型比较通用,非图数据比较容易转换成图数据,CCF论文中也已经应用到恶意代码检测中。
2.静态特征设计举例
Saxe J,Berlin K. Deep neural network based malware detection using two dimensional binary program features[C] // 2015 10th International Conference on Malicious and Unwanted Software(MALWARE). IEEE, 2015: 11-20
特征抽取
使用了四种特征特征抽取输入到深度神经网络
包含两层隐含层的深度神经网络分数校正
TP:本身是恶意样本,并且预测识别为恶意样本
FP:本身是恶意样本,然而预测识别为非恶意样本,这是误分类的情况
FN:本身是非恶意样本,然而预测识别为恶意样本,这是误分类的情况
TN:本身是非恶意样本,并且预测识别为非恶意样本
3.经典的图片特征举例
4.动态特征设计举例
Kolosnjaji B,Zarras A,Webster G,et al. Deep learning for classification of malware system call sequences[C] // Australasian Joint Conference on Artificial Intelligence. Springer,Cham,2016:137-149.
Cuckoo沙箱
LSTM
5.深度学习静态检测举例
Coull S E,Gardner C. Activation Analysis of Byte-Based Deep Neural Network for Malware Classification[C] // 2019 IEEE Security and Privacy Workshops(SPW). IEEE,2019:21-27.
首先,原始的字节码特征直接输入一个Byte Embedding层(词嵌入),对单个元素进行向量化处理,将字节码中的每个字节表示成一个固定长度的向量,从而更好地将字节标记在一个空间维度中。词嵌入技术广泛应用于自然语言处理领域,比如“女人”和“女王”关系比较紧密,这篇文章的目的也是想要在恶意代码中达到类似的效果。
然后将矩阵输入到卷积和池化层中,比如存在一个100K字节的二进制文件,得到100102410矩阵输入卷积神经网络中,最后通过全连接层完成恶意和非恶意的分类任务。
6.优缺点
优点
特征提取速度快
特征种类丰富,可以组合多种特征向量缺点
易受加壳、加密、混淆干扰
无法防范无文件攻击,难以反映恶意软件行为的恶意性
优点
提供恶意软件的动作,调用API
规避一些静态的混淆对抗方法缺点
反虚拟化,延时触发等技术的对抗
测试时间较长,单个样本2-3分钟(Cuckoo)
404notfound实验室总结的AI在安全领域应用
https://github.com/404notf0und/AI-for-Security-Learningmalware data science书籍
https://www.amazon.com/Malware-Data-Science-Detection-Attribution-ebook/dp/B077X1V9SY
7.静态分析和动态分析对比
采集大量的恶意代码样本以及正常的程序样本作为训练样本;
对训练样本进行预处理,提取特征;
进一步选取用于训练的数据特征;
选择合适的机器学习算法训练分类模型;
通过训练后的分类模型对未知样本进行检测。
深度学习作为机器学习的一个分支,由于其可以实现自动化的特征提取,近些年来在处理较大数据量的应用场景,如计算机视觉、语音识别、自然语言处理时可以取得优于传统机器学习算法的效果。随着深度学习在图像处理等领域取得巨大的成功,许多人将深度学习的方法应用到恶意软件检测上来并取得了很好的成果。实际上就是用深度神经网络代替上面步骤中的人为的进一步特征提取和传统机器学习算法。根据步骤中对训练样本进行预处理的方式,可以将检测分为静态分析与动态分析:
静态分析不运行待检测代码,而是通过直接对程序(如反汇编后的代码)进行统计分析得到数据特征
动态分析则在虚拟机或沙箱中执行程序,获取程序执行过程中所产生的数据(如行为特征、网络特征),进行检测和判断。
(1) 静态分析
一般来说,在绝大部分情形下我们无法得到恶意程序的源代码。因此,常用的静态特征包括程序的二进制文件、从使用IDA Pro等工具进行反汇编得到的汇编代码中提取的汇编指令、函数调用等信息,另外基于字符串和基于API调用序列的特征也是比较常见的。
文献[i]提出一种对PE文件的恶意程序检测方法,提取PE文件四个类型的特征:字节频率、二元字符频率、PE Import Table以及PE元数据特征,采用包含两个隐藏层的DNN作为分类模型,但是为了提取长度固定的输入数据,他们丢弃了PE文件中的大部分信息。文献[ii]使用CNN作为分类器,通过API调用序列来检测恶意软件,其准确率达到99.4%,远高于传统的机器学习算法。然而,当恶意代码存在混淆或加壳等情形时,对所选取的静态特征具有较大的影响,因此静态分析技术本身具有一定的局限性。
(2) 动态分析
利用虚拟机或沙箱执行待测程序,监控并收集程序运行时显现的行为特征,并根据这些较为高级的特征数据实现恶意代码的分类。一般来讲,行为特征主要包括以下几个方面:文件的操作行为;注册表键值的操作行为;动态链接库的加载行为;进程访问的操作行为;系统服务行为;网络访问请求;API调用。
文献[iii]通过API调用序列记录进程行为,使用RNN提取特征向量,随后将其转化为特征图像使用CNN进行进一步的特征提取,提取其可能包含的局部特征并进行分类。文献[iv]提出了一个基于动态分析的2层架构的恶意软件检测系统:第1层是RNN,用于学习API事件的特征表示;第2层是逻辑回归分类器,对RNN学习的特征进行分类,然而这种方法的误报率较高。文献[v]提出了用LSTM和GRU代替传统RNN进行特征的提取,并提出了使用CNN的字符级别的检测方案。文献[vi]提出在恶意软件运行的初期对其进行恶意行为的预测,他们使用RNN进行PE文件检测,根据恶意代码前4秒的运行行为,RNN对恶意软件的预测准确率是91%,随着观察的运行时间的增长,RNN的预测准确率也随之提高。可以看到,相对于静态分析,动态分析的过程更加复杂耗时,相对而言采用了较高层次的特征,因此可解释性也较差。
在网络攻击趋于精细化、恶意代码日新月异的今天,基于深度学习算法的恶意代码检测中越来越受到学术界和众多安全厂商的关注。但这种检测技术在现实应用中还有很多尚未解决的问题。例如上面提到的静态分析与动态分析存在的不足,现在发展的主流方向是将静态、动态分析技术进行结合,使用相同样本的不同层面的特征相对独立地训练多个分类器,然后进行集成,以弥补彼此的不足之处。
除此之外,深度学习算法的可解释性也是制约其发展的一个问题,当前的分类模型一般情况下作为黑盒被加以使用,其结果无法为安全人员进一步分析溯源提供指导。我们常说攻防是息息相关的,螺旋上升的状态。既然存在基于深度学习的恶意代码检测技术,那么自然也有基于深度学习的或者是针对深度学习的恶意代码检测绕过技术,这也是近年来研究的热点问题,那么如何提高模型的稳健性,防止这些定制化的干扰项对我们的深度学习算法产生不利的影响,对抗生成网络的提出或许可以给出答案。
三.机器学习算法在工业界的应用
首先普及一个概念——NGAV。NGAV(Next-Gen AntiVirus)是下一代反病毒软件简称,它是一些厂商提出来的新的病毒检测概念,旨在用新技术弥补传统恶意软件检测的短板。
多家杀毒引擎厂商将机器学习视作NGAV的重要技术,包括McAfee[11], Vmware[9], CrowdStrike[10], Avast[6]
越来越多的厂商开始关注机器学习技术,并发表相关的研究(卡巴斯基[7],火眼[8]),火眼还是用机器学习技术对APT进行分析(组织相似度溯源)
越来越多的安全厂商将机器学习视为反病毒软件的一个关键技术,但需要注意,NGAV并不是一个清晰的定义,你没法去界定一个反病毒软件是上一代产品还是下一代产品。衡量反病毒软件的性能只有对恶意软件的检测率、计算消耗、误报率等,我们只是从现状分析得到越来越多安全领域结合了机器学习。
作为安全从业人员或科研人员,机器学习技术也是我们必须要关注的一个技术。
机器学习算法需要解决的问题如下:
算力问题
机器学习和深度学习算法需要大量的算力,如果我们在本地部署还需要GPU的支持,这样就带来了一个硬件配置问题,所以如何减小模型的size及提升模型的检测能力是一个关键性的问题。大规模的特征数据
特征对于分类训练非常关键,如何抽取这些数据特征呢?训练的模型是可解释的
这个问题可以说是机器学习算法和深度学习算法在反病毒软件应用中最关键的一个问题,病毒的对抗是黑客与安全从业人员的对抗的前线,如果我们训练的模型是不可解释的,那么一旦被黑客发现某些规则存在的弱点,他们就可以针对这些弱点设计免杀方法,从而绕过造成重大安全隐患。另一方面,如果机器学习算法是不可解释黑盒的,用户他也是不可接受的,难以起到保护重要。误报需要维持极度的低水平
误报是反病毒软件用户体验的一个重要指标,传统的特征码技术、主动防御技术都具有误报低的特性,而机器学习是一个预测技术,会存在一些误报,如何避免这些误报并且提高检测的查全率也是重要的问题。算法需要根据恶意软件作者的变化快速适应新的检测特征
这也是关键性问题,在机器学习模型应用中,恶意软件是不断变化的,而机器学习算法部署到本地中,它的参数是不变的,所以在长时间的恶意演化中其模型或参数不再适用,其检测结果会有影响。目前,云沙箱、在线更新病毒库特征是一些解决方法。
最后作者总结下机器学习算法的优势,具体如下:
(1) 传统方法
优点:速度快,消耗计算资源少
只需要将特征码提取出来,上传至云端进行检测;相对于机器学习大量的矩阵计算,其计算资源消耗少。缺点:容易绕过,对于未知恶意软件检出率低
使用加壳、加密、混淆容易绕过,对于未知软件不知道其特征码,只能通过启发式方法、主动防御检测,相对于机器学习检测率要低。
(2) 机器学习方法
优点:能够建立专家难以发现的规则与特征
发现的规则和特征很可能是统计学特征,而不是恶意和非恶意的特征,所以这些特征很容易被黑客进行规避,这既是优点也是缺点,虽然有缺陷,但也能发现恶意样本的关联和行为。缺点:资源消耗大,面临漂移问题,需要不断更新参数
四.总结
写到这里,这篇文章就介绍完毕,希望对您有所帮助,最后进行简单的总结:
机器学习方法与传统方法不是取代与被取代的关系,而是相互补充,好的防御系统往往是多种技术方法的组合。
机器学习的检测方法研究还不充分,安全领域的专有瓶颈与人工智能研究的共有瓶颈均存在、
机器学习算法本身也面对一些攻击方法的威胁,比如对应抗本。
对抗样本指的是一个经过微小调整就可以让机器学习算法输出错误结果的输入样本。在图像识别中,可以理解为原来被一个卷积神经网络(CNN)分类为一个类(比如“熊猫”)的图片,经过非常细微甚至人眼无法察觉的改动后,突然被误分成另一个类(比如“长臂猿”)。再比如无人驾驶的模型如果被攻击,Stop标志可能被汽车识别为直行、转弯。
学安全近两年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢老师、师兄师弟、师姐师妹们的教导,深知自己很菜,得努力前行。
《珈国情》
明月千里两相思,
清风缕缕寄离愁。
燕归珞珈花已谢,
情满景逸映深秋。
最感恩的永远是家人的支持,知道为啥而来,知道要做啥,知道努力才能回去。夜已深,虽然笨,但还得奋斗。感恩5000名粉丝,想念亲人。加油~
欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。
(By:Eastmount 2021-11-22 夜于武汉 )
前文回顾(下面的超链接可以点击喔):
[系统安全] 三十三.恶意代码检测(3)基于机器学习的恶意代码检测技术
参考文献:
[1] Saxe J, Berlin K. Deep neural network based malware detection using two dimensional binary program features[C]//2015 10th International Conference on Malicious and Unwanted Software (MALWARE). IEEE, 2015: 11-20.
[2] https://www.kaggle.com/c/malware-classification
[3] https://www.fireeye.com/blog/threat-research/2018/12/what-are-deep-neural-networks-learning-about-malware.html
[4]Kolosnjaji B, Zarras A, Webster G, et al. Deep learning for classification of malware system call sequences[C]//Australasian Joint Conference on Artificial Intelligence. Springer, Cham, 2016: 137-149.
[5] Wüchner T, Cisłak A, Ochoa M, et al. Leveraging compression-based graph mining for behavior-based malware detection[J]. IEEE Transactions on Dependable and Secure Computing, 2017, 16(1): 99-112.
[6]https://www.avast.com/technology/malware-detection-and-blocking
[7] https://media.kaspersky.com/en/enterprise-security/Kaspersky-Lab-Whitepaper-Machine-Learning.pdf
[8] https://www.fireeye.com/blog/threat-research/2019/03/clustering-and-associating-attacker-activity-at-scale.html
[9] https://www.carbonblack.com/resources/definitions/what-is-next-generation-antivirus/
[10] https://www.crowdstrike.com/epp-101/next-generation-antivirus-ngav/
[11] https://www.mcafee.com/enterprise/en-us/security-awareness/endpoint/what-is-next-gen-endpoint-protection.html
[12] 重点推荐:https://mooc.study.163.com/learn/1000003014?share=2&shareId=1000001005
[13] 重点推荐:《软件安全之恶意代码机理与防护》WHU
[14] 师兄的分享及作者学习和实践经验
其他论文:
[i] Saxe, J., & Berlin, K. (2015, October). Deep neural network-based malware detection using two-dimensional binary program features. In 2015 10th International Conference on Malicious and Unwanted Software (MALWARE) (pp. 11-20). IEEE.
[ii] Nix, R., & Zhang, J. (2017, May). Classification of Android apps and malware using deep neural networks. In 2017 International joint conference on neural networks (IJCNN) (pp. 1871-1878). IEEE.
[iii] Tobiyama, S., Yamaguchi, Y., Shimada, H., Ikuse, T., & Yagi, T. (2016, June). Malware detection with deep neural network using process behavior. In 2016 IEEE 40th Annual Computer Software and Applications Conference (COMPSAC) (Vol. 2, pp. 577-582). IEEE.
[iv] Pascanu, R., Stokes, J. W., Sanossian, H., Marinescu, M., & Thomas, A. (2015, April). Malware classification with recurrent networks. In 2015 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 1916-1920). IEEE.
[v] Athiwaratkun, B., & Stokes, J. W. (2017, March). Malware classification with LSTM and GRU language models and a character-level CNN. In 2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 2482-2486). IEEE.
[vi] Athiwaratkun, B., & Stokes, J. W. (2017, March). Malware classification with LSTM and GRU language models and a character-level CNN. In 2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 2482-2486). IEEE.